#pragma GCC optimize(2)
#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=2e5+10;
int a[N];
int b[N];
int c[N];
int st[N];
int main()
{
	int t=1;
	while(t--)
	{
		int n;
		cin>>n;
		for(int i=1;i<=n;i++) cin>>a[i];
		
		int idx=0;
		for(int i=1;i<=n;i++)
		{
			if(a[i]!=a[i-1] || a[i]==0)
			{
				idx++;
				b[idx]=a[i];
			}
		}
		
		for(int i=1;i<=idx;i++)
		{
			if(b[i]==1 && (b[i+1]==2 || b[i-1]==2)) b[i]=2;
		}
		int idx2=0;
		for(int i=1;i<=idx;i++)
		{
			if(b[i]!=b[i-1] || b[i]==0)
			{
				idx2++;
				c[idx2]=b[i];
			}
		}
		
		int p=0;
		int cnt=0;

        for(int i=1;i<=idx2;i++)
        {
        	if(c[i]==2)
        	{
        		cnt++;
        		st[i]=1;
        		st[i-1]=1;
        		st[i+1]=1;
			}
		}
//		cout<<cnt;
		for(int i=1;i<=idx2;i++)
		{
//			cout<<c[i]<<' ';
			if(c[i]==1)
			{
				st[i]=1;
				cnt++;
				if(i-1!=0 && c[i-1]==0 && !st[i-1])
				{
					st[i-1]=1;
				}
				else if( i!=n && c[i+1]==0 && !st[i+1]) st[i+1]=1;
			}
			
		}
		
//		cout<<endl;;
		
		for(int i=1;i<=idx2;i++)
		{
//			cout<<st[i]<<' ';
			if(!st[i]) cnt++;
		}
		cout<<cnt;
	}

	return 0;
}

